var isPhone = (window.navigator.platform != "Win32");
var isAndroid = (window.navigator.userAgent.indexOf('Android')>=0)?true : false;


/**
 * @param String inWndName 新窗口名称
 * @param String html       新窗口路径
 * @param String inAniID    打开动画
 * @param String f
 */
function openNewWin(inWndName,html,inAniID,f){
    if(inAniID)
        uexWindow.open(inWndName,'0',html,inAniID,'','',(f)?f:0);
    else
        uexWindow.open(inWndName,'0',html,2,'','',(f)?f:0);
}

/**
 * 关闭窗口
 * @param string n 关闭窗口动画，默认-1
 */
function winClose(n){
    if(n){
        uexWindow.close(n);
        return;
    }
    if(parseInt(n)==0){
        uexWindow.close(n);
        return;
    }
    uexWindow.close(-1);
}

/**
 * 去除字符串中的空格
 * @param String s
 */
function trim(s) {
    var count = s.length;
    var st = 0;
    var end = count - 1;

    if (s == "")
        return s;
    while (st < count) {
        if (s.charAt(st) == " ")
            st++;
        else
            break;
    }
    while (end > st) {
        if (s.charAt(end) == " ")
            end--;
        else
            break;
    }
    return s.substring(st, end + 1);
}

/**
 * 计算字符串的长度
 * @param String strTemp
 */
function fucCheckLength(strTemp) {
    var i, sum;
    sum = 0;
    for (i = 0; i < strTemp.length; i++) {
        if ((strTemp.charCodeAt(i) >= 0) && (strTemp.charCodeAt(i) <= 255))
            sum = sum + 1;
        else
            sum = sum + 2;
    }
    return sum;
}

/**
 * 输出loag
 * @param String s 需要输出的信息
 * @param String a 添加的标注信息
 */
function logs(s,a){
    if(typeof s == 'object'){
        s = JSON.stringify(s);
    }
    a = a ? a : "";
    if(!isPhone){
        console.log(a+s);
    }else{
        uexLog.sendLog(a+s);
    }
}

/**
 * localStorage保存数据
 * @param String key  保存数据的key值
 * @param String value  保存的数据
 */
function setLocVal(key,value){
    window.localStorage[key] = value;
}

/**
 * 根据key取localStorage的值
 * @param Stirng key 保存的key值
 */
function getLocVal(key){
    if(window.localStorage[key])
        return window.localStorage[key];
    else
        return "";
}
var iG={};
iG.setObjItem = function(obj,key,value){
    var json = localStorage.getItem(obj);
    if(json == null || json == undefined || json == "undefined" || json == ""){
        json = {};
    }else{
        json=JSON.parse(json);
    }
    json[key] = value;
    localStorage.setItem(obj,JSON.stringify(json));
};
iG.getObjItem = function(obj,key){
    var json = localStorage.getItem(obj);
    if(json == null || json == undefined || json == "undefined" || json == ""){
        return undefined;
    }else{
        json=JSON.parse(json);
    }
    return json[key];
};

/**
 * 清除缓存
 * @param Striong key  保存数据的key，如果不传清空所有缓存数据
 */
function clearLocVal(key){
    if(key)
        window.localStorage.removeItem(key);
    else
        window.localStorage.clear();
}

/**
 * alert 和 confirm 弹出框
 * @param String str 提示语
 * @param Function callback confirm的回调函数
 */
function alert(str,callback){
    if(callback){
        uexWindow.cbConfirm = function(opId,dataType,data){
            if(data == 0)
                callback(); 
        }
        uexWindow.confirm('提示',str,['确定'])
    }else
        uexWindow.alert('提示',str,'确定');
}

/**
 * 根据时间戳获取年、月、日
 * @param String str 时间戳
 * @param Boolean f 是否在原来的基础上*1000，true要*，false或不填就不*
 */
function getMakeTimes(str,f){
    var t = (f) ? int(str) : int(str)*1000;
    var d = new Date(t);
    var y = d.getFullYear();
    var m = setNum(d.getMonth()+1);
    var d = setNum(d.d.getDate());
    return y+"-"+m+"-"+d;
}

function setNum(s){
    return (int(s)>9) ? s : '0'+s;
}

/**
 * 在其他窗口中执行指定主窗口中的代码
 * @param String wn  需要执行代码窗口的名称
 * @param String scr 需要执行的代码
 */
function uescript(wn, scr){
    uexWindow.evaluateScript(wn,'0',scr);
}

/**
 * 在其他窗口中执行指定浮动窗口中的代码
 * @param String wn  需要执行代码浮动窗口所在的主窗口的名称
 * @param String pn  需要执行代码的浮动窗口的名称
 * @param String scr 需要执行的代码
 */
function ueppscript(wn, pn, scr){
    uexWindow.evaluatePopoverScript(wn,pn,scr);
}

/**
 * 判断是否是空
 * @param value
 */
function isDefine(value){
    if(value == null || value == "" || value == "undefined" || value == undefined || value == "null" || value == "(null)" || value == 'NULL' || typeof(value) == 'undefined'){
        return false;
    }
    else{
        return true;
    }
}

/**
 * 图片预加载
 * @param String imgId div的ID，图片加载成功后给该div换背景
 * @param String imgUrl 图片路径
 */
function preloadImg(imgId,imgUrl){
    var newImg = new Image();
    newImg.src = imgUrl;
    newImg.onload=function(){
        $$(imgId).style.backgroundImage = "url("+newImg.src+")";
        newImg = null;
    }

}

/**
 * 给DOM对象赋值innerHTML
 * @param String id 对象id
 * @param String html html字符串
 */
function setHtml(id, html) {
    if ("string" == typeof(id)) {
        var ele = $$(id);
        if (ele != null) {
            ele.innerHTML = html == null ? "" : html;
        }
    } else if (id != null) {
        id.innerHTML = html == null ? "" : html;
    }
}

/**
 * 设置平台弹动效果
 * @param Function downcb 下拉
 * @param Function upcb   上拖
 */
function setPageBounce(downcb, upcb){
    var s = ['0', '0'];
    var str = '';
    uexWindow.onBounceStateChange = function (type,status){
        if(downcb && type==0 && status==2) downcb();
        if(upcb && type==1 && status==2) upcb();
    }
    
    uexWindow.setBounce("1");
    
    if(downcb){
        s[0] = '1';
        uexWindow.notifyBounceEvent("0","1");
    }
    uexWindow.showBounceView("0","rgba(255,255,255,0)",s[0]);
    
    if(upcb){
        s[1] = '1';
        uexWindow.notifyBounceEvent("1","1");
    }
    uexWindow.showBounceView("1","rgba(255,255,255,0)",s[1]);
}

/***
 * 使弹动重置为初始位置
 * @param String type 弹动的类型 0-顶部弹动  1-底部弹动 
 */
function resetBV(type){
    uexWindow.resetBounceView(type);
}

/**
 * 显示加载框
 * @param String mes 显示的提示语
 * @param String t  毫秒数 窗口存在时间 有的话显示框不显示那个“圈”，并且在t时间后消失
 */
function $toast(mes,t){
    uexWindow.toast(t?'0':'1','5',mes,t?t:0);
}

/**
 * 手动关闭加载框
 */
function $closeToast(){
    uexWindow.closeToast();
}

/**
 * 浮动窗口移动动画函数
 * @param String 横向移动位移
 * @param String 纵向移动位移
 * @param Function 动画结束后的回调函数
 */
function disShowAnim(dx, dy, cb){
    uexWindow.beginAnimition();
    uexWindow.setAnimitionDuration('250');
    uexWindow.setAnimitionRepeatCount('0');
    uexWindow.setAnimitionAutoReverse('0');
    uexWindow.makeTranslation(dx,dy,'0');
    uexWindow.commitAnimition();
    if(cb) uexWindow.onAnimationFinish = cb;
}

/**
 * getJSON请求数据的错误回调函数
 * @param {Object} err 返回的错误对象
 */
function getJSONError(err){
    $closeToast();
    resetBV(0);
    resetBV(1);
    if (err.message == 'network error!') {
        alert('网络未连接');
    }else if (err.message == 'json parse failed!') {
        alert('网络未连接');
    }else if (err.message == 'file does not exist!') {
        alert('文件不存在');
    }else if (err.message == 'read file failed!') {
        alert('文件读取错误');
    }else {
        alert('发现未知错误');
    }
}

var dbname = "localdb",dbId = 0,userId = 500;
/**
 * 创建或打开数据库
 * @param {Object} cb   初始化DB
 */
function openDB(cb){
    uexDataBaseMgr.cbOpenDataBase = function(opId,type,data){
        if(type==2 && data==0){
            if(cb)  cb();
        }
    }               
    uexDataBaseMgr.openDataBase(dbname,++dbId); 
}


/**
 * 查询操作
 * @param {Object} id
 * @param {Object} sql
 * @param {Object} cb
 */
function selSql(id,sql,cb){
    uexDataBaseMgr.cbSelectSql = function(opId,type,data){
        logs('selSql:   '+opId+','+type+','+data);
        if(type==1){
            if(cb && opId == id)    cb(data);
        //  else if(cb) cb(false);
        }
    }
    uexDataBaseMgr.selectSql(dbname,id,sql);
}

/**
 * 增删改操作
 * @param {Object} id
 * @param {Object} sql
 * @param {Object} cb
 */
function exeSql(id,sql,cb){
    uexDataBaseMgr.cbExecuteSql = function(opId,type,data){
        logs('exeSql:   '+opId+','+type+','+data);
        if(type==2 && data==0){
            if(cb && opId == id)    cb(data);
            //else if(cb)   cb(false);
        }
    }
    uexDataBaseMgr.executeSql(dbname,id,sql);
}

/**设置安卓back和menu按键事件监听
 * @b: back键，1为监听。
 * @m: menu键，1为监听。
 * @cb1: back键监听处理回调方法。
 * @cb2: menu键监听处理回调方法。
 */
function addKeyListener(b, m, cb1, cb2){
    if(!isSML) {
        uexWindow.onKeyPressed = function(keyCode){
            if(keyCode==0){
                if(cb1)  cb1();
                //uexWidget.finishWidget(''); //退出应用
            }
            else{
                if(cb2) cb2();
            }
        }
        if(b) uexWindow.setReportKey('0', '1');
        if(m) uexWindow.setReportKey('1', '1');
    }
}

/**
 * json对象转为string
 * @param {Object} j
 */
function json2str(j){
    return JSON.stringify(j);
}
/**
 * string转为json对象
 * @param String s
 */
function str2json(s){
    return JSON.parse(s);
}

/**
 * 取input数据
 * @id: input标签id
 * 返回值：数据内容
 */
function getValue(id){
    var e = $$(id);
    if(e) return e.value;
}

/**
 * 设置input数据
 * @id: input标签id
 * @val: 要设置的数据
 */
function setValue(id, val){
    var e = $$(id);
    if(e) e.value = val;
}

/**
 * 创建DOM节点
 * @param String t
 */
function createEle(t){
    return document.createElement(t);
}
/**
 * 删除DOM节点
 * @param String id
 */
function removeNode(id){
    var e = $$(id);
    if(e) e.parentElement.removeChild(e);
}

/**
 * 调用本地浏览器打开网址
 * @param String url
 */
function loadLink(url){
    var appInfo = ''; 
    var filter = '';
    var dataInfo = url.toLowerCase();
    var pf = uexWidgetOne.platformName;
    if(pf=='android'){
        appInfo = 'android.intent.action.VIEW';
        filter = 'text/html';
    }
    if(dataInfo.indexOf('http://')<0 && dataInfo.indexOf('https://')<0){
        dataInfo = 'http://'+dataInfo;
    }
    uexWidget.loadApp(appInfo, filter, dataInfo);
}

/**
 *UTF编码 
 */
function encodeUTF8(str){  
    var temp = "",rs = "";  
    for( var i=0 , len = str.length; i < len; i++ )
    {  
        temp = str.charCodeAt(i).toString(16);  
        rs  += "\\u"+ new Array(5-temp.length).join("0") + temp;  
    }  
    return rs;  
}  

/**
 *UTF解码 
 */
function decodeUTF8(str){  
    return str.replace(/(\\u)(\w{4}|\w{2})/gi,
        function($0,$1,$2)
        {  
          return String.fromCharCode(parseInt($2,16));  
        }
    );   
}


function char2Ascii(str)
{
        var len=str.length;
        var temp="";
        for(var i=0;i<len;i++)
        {
            var c = (str.charCodeAt(i)).toString(2);
            if (c.length == 6) 
            {
                c = "00" + c;
            }
            else {
                if (c.length == 7) 
                    c = "0" + c;
//              else 
//              {
//                  c = str.substr(i, 1);
//                  c = EncodeUtf8(c);
//              }
            }
            temp+=c;
        }
      return temp;
}


function string2Binary(str)
{
    var temp = "";
    for(var i = 0; i < str.length; i++)
    {
        var a = str.charCodeAt(i);
        if (a > 255)
            temp += EncodeUtf8(str.charAt(i));
        else
            temp += padLeft(a.toString(2), 8, '0');
    }
    return temp;
}

function padLeft(a, b, c) {
    while(a.length < b) {
        a = c + a;
    }
    return a;
}

//全局变量，移动地服公共的请求地址
var yddfProUrl = "http://mpservice.ceair.com/mpservice/"; 
//var yddfProUrl="http://172.31.3.190:8080/mpservice/";  
//var yddfProUrl = "http://mpservice.ceair.com/ecosphere"; 
/**
@host_address
主机地址
*/
var host_address_url = "http://mgstest.ceair.com:8080/";
var host_address_nameSpace = "null";
var host_address_function = "null";
RequestKey='FDDBCAA11500948183F0299431B2B571';

/**
 * 机场定位 
 */
function setLocalLocation(callback){
    uexWindow.toast(1,5,"正在定位，请稍等...",-1);
    var uAddress = localStorage['uAddress'];
    if (uAddress != undefined) {
        var uAddressArr = uAddress.split("loc=");
        
        uAddress = decodeURIComponent(uAddressArr[1]);
        if(uAddress.indexOf("省")>0)
        {
            uAddressArr = uAddress.split("省");
            uAddress = uAddressArr[1];
            uAddressArr = uAddress.split("市");
            uAddress = uAddressArr[0];
        }
        else
        {
             uAddressArr = uAddress.split("市");
             uAddress = uAddressArr[0];
        }
        if (uAddress == undefined || uAddress == "" || uAddress == null) {
            uAddress = "上海";
        }
        
        setLocalAddress(uAddress,callback);
    }
    else {  
        localStorage.setItem("Default_IATACode", "SHA");
        localStorage.setItem("Default_FullName", "上海虹桥");
        //setLocalAddress("上海虹桥",callback);
        setDefauleIATACodeCallback("SHA", "上海虹桥");
    }
}

function setLocalAddress(uAddress,callback){            
    uAddress = base64encode(utf16to8(uAddress))
    var jsonPage = [{
                'key': 'RequestKey',
                'type': '0',
                'value': RequestKey
            }, {
                'key': 'act',
                'type': '0',
                'value': 'Get_uAddress'
            }, {
                'key': 'key',
                'type': '0',
                'value': uAddress
            }];
 
   $.getJSON(host_address_url + "mobile_app.jsp", function(json){
        var IATACode = "SHA";
        var FullName = "上海虹桥";
        if (json.IATACode == 'PVG') {
            IATACode = "SHA";
            FullName = "上海虹桥";
        }
        else
        {
            if (IATACode == "null" || IATACode == null || IATACode == "") {
                IATACode = "SHA";
                FullName = "上海虹桥";
            }
            else {
                IATACode = json.IATACode;
                FullName = json.FullName;
            }
        }
        localStorage.setItem("Default_IATACode", IATACode);
        localStorage.setItem("Default_FullName", FullName);
        callback(IATACode,FullName);
    }, "json", function(e){}, "POST", jsonPage, false);
}
 function setDefauleIATACodeCallback(Default_IATACode,Default_FullName){
    $$("airportText").setAttribute("data-airport",Default_IATACode);
    $$("airportText").innerHTML = Default_FullName;
    uexWindow.closeToast(); //关闭定位提示框
    queryAirPortInfo("out",Default_IATACode); //默认初始化当前机场航班出港信息
    queryCurrentAirport(Default_IATACode); //初始化进出港信息
}
/* 
 * 检测对象是否是空对象(不包含任何可读属性)。 
 * 方法既检测对象本身的属性，也检测从原型继承的属性(因此没有使hasOwnProperty)。 
 */
function isEmptyObject(obj) 
{ 
    for (var name in obj)  
    { 
        return false; 
    } 
    return true; 
}

function isNotEmptyObject(obj){
    return !isEmptyObject(obj);
}
